package org.jiajie.coffeecodes.algorithm;

/**
 * 线性探查（linear probing）
 *
 * @author jay
 */
public class IntSet2 {
    private Object[] _values = new Object[10];

    private int H(int value){
        return value % 10;
    }

    private int LH(int value, int i) {
        return (H(value) + i) % 10;
    }

    public void Add(int item) throws Exception {
        // 已经探查过的槽的数量
        int i = 0;
        do {
            // 想要探查的地址
            int j = LH(item, i);
            if (_values[j] == null) {
                _values[j] = item;
                return;
            } else {
                i += 1;
            }
        } while (i <= 10);
        throw new Exception("集合溢出");
    }

    public boolean Contains(int item){
        // 已经探查过的槽的数量
        int i = 0;
        // 想要探查的地址
        int j = 0;
        do {
            j = LH(item, 1);
            if (_values[j] == null) {
                return false;
            }
            if ((int)_values[j] == item) {
                return true;
            } else {
                i += 1;
            }
        } while (i <= 10);
        return false;
    }

    public void Remove(int item){}
}
